# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器，以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。
# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80

# 此阶段用于生成服务项目
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG BUILD_CONFIGURATION=Release
# 将镜像内部的工作目录直接设置为项目文件夹的路径
# 这样后续的 dotnet 命令就可以直接在 /src/Including_ci_cd 中找到项目文件
WORKDIR /src/Including_ci_cd
# 从构建上下文（PROJECT_DIR）中，复制 'Including_ci_cd/' 文件夹的所有内容到镜像的当前工作目录（/src/Including_ci_cd/）
# 源路径：Including_ci_cd/ （这是相对于构建上下文PROJECT_DIR的路径）
# 目标路径：. （这是镜像内部的当前WORKDIR /src/Including_ci_cd）
COPY Including_ci_cd/ .

# 恢复项目依赖
# 现在 .csproj 文件就在当前工作目录 /src/Including_ci_cd 中
RUN dotnet restore

# 构建应用程序
RUN dotnet build -c $BUILD_CONFIGURATION -o /app/build

# 此阶段用于发布要复制到最终阶段的服务项目
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
# 确保在发布阶段的工作目录也是项目文件夹
WORKDIR "/src/Including_ci_cd"
RUN dotnet publish -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# 此阶段在生产中使用，或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Including_ci_cd.dll"]